home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / Reference / DevCon / Orlando_1993 / Devcon93.4 / CAMD / examples / trans / trans_tm.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-01  |  34.9 KB  |  1,335 lines

  1.  /* Code generated by Toolmaker V1.13 */
  2.  
  3. #include <stdlib.h>
  4.  
  5. #include <exec/types.h>
  6. #include <graphics/view.h>
  7. #include <graphics/displayinfo.h>
  8. #include <dos/dos.h>
  9. #include <intuition/intuition.h>
  10. #include <intuition/gadgetclass.h>
  11. #include <intuition/imageclass.h>
  12. #include <intuition/classes.h>
  13. #include <libraries/gadtools.h>
  14. #include <exec/memory.h>
  15.  
  16. #include <clib/exec_protos.h>
  17. #include <clib/graphics_protos.h>
  18. #include <clib/intuition_protos.h>
  19. #include <clib/gadtools_protos.h>
  20. #include <clib/utility_protos.h>
  21. #include <clib/realtime_protos.h>
  22. #include <clib/macros.h>
  23.  
  24. #include <pragmas/exec_pragmas.h>
  25. #include <pragmas/graphics_pragmas.h>
  26. #include <pragmas/intuition_pragmas.h>
  27. #include <pragmas/gadtools_pragmas.h>
  28. #include <pragmas/utility_pragmas.h>
  29. #include <pragmas/realtime_pragmas.h>
  30.  
  31. #include "trans.h"
  32. #include "boximage.h"
  33.  
  34. static BOOL TM_WindowSignal(struct TMData *);
  35. static VOID TM_RemoveWindow(struct TMWindowInfo *);
  36. static BOOL WindowIDCMP_TRANSP(struct TMData *, struct IntuiMessage *);
  37. static BOOL WindowIDCMP_SELECTCO(struct TMData *, struct IntuiMessage *);
  38.  
  39. UWORD __chip WaitPointer[36] =
  40.   {
  41.   0x0000, 0x0000,
  42.   0x0400, 0x07C0,
  43.   0x0000, 0x07C0,
  44.   0x0100, 0x0380,
  45.   0x0000, 0x07E0,
  46.   0x07C0, 0x1FF8,
  47.   0x1FF0, 0x3FEC,
  48.   0x3FF8, 0x7FDE,
  49.   0x3FF8, 0x7FBE,
  50.   0x7FFC, 0xFF7F,
  51.   0x7EFC, 0xFFFF,
  52.   0x7FFC, 0xFFFF,
  53.   0x3FF8, 0x7FFE,
  54.   0x3FF8, 0x7FFE,
  55.   0x1FF0, 0x3FFC,
  56.   0x07C0, 0x1FF8,
  57.   0x0000, 0x07E0,
  58.   0x0000, 0x0000,
  59.   };
  60.  
  61.     /* transport buttons */
  62.  
  63. UWORD __chip stop_data[] = { 0xFF80,0xFF80,0xFF80,0xFF80,0xFF80,0xFF80,0xFF80 };
  64. UWORD __chip play_data[] = { 0xC000,0xF000,0xFC00,0xFF00,0xFC00,0xF000,0xC000 };
  65. UWORD __chip rew_data[]  = { 0x0301,0x8000,0x0F07,0x8000,0x3F1F,0x8000,0xFF7F,0x8000,0x3F1F,0x8000,0x0F07,0x8000,0x0301,0x8000 };
  66. UWORD __chip ff_data[]   =    { 0xC060,0x0000,0xF078,0x0000,0xFC7E,0x0000,0xFF7F,0x8000,0xFC7E,0x0000,0xF078,0x0000,0xC060,0x0000 };
  67. UWORD __chip pause_data[]= { 0xE380,0xE380,0xE380,0xE380,0xE380,0xE380,0xE380 };
  68.  
  69. UWORD __chip clocklabel_data[84] =
  70. {    0xC600,0x0030,0x6C00,0x007C,0x0000,0x07F0,0x0000,
  71.     0xC678,0x0038,0xE1B0,0x00C0,0x78F0,0x0603,0xCD80,
  72.     0xC6C0,0x0035,0x6DD8,0x0070,0xCD80,0x07C6,0x1DC0,
  73.     0xFEC0,0x0032,0x6D98,0x001C,0xFD80,0x0606,0x1AC0,
  74.     0xC6C0,0x0030,0x6D98,0x0006,0xC180,0x0606,0x1AC0,
  75.     0xC6C0,0x0030,0x6D98,0x00FC,0x78F0,0x0606,0x18C0,
  76. };
  77.  
  78. struct Image clocklabel_im =
  79. {    0,0,
  80.     106,6,
  81.     1,
  82.     clocklabel_data,
  83.     0x1,0x0,
  84.     NULL
  85. };
  86.  
  87. struct Glyph {
  88.     WORD                w,h;
  89.     UWORD                *data;
  90. };
  91.  
  92. struct Glyph stop_glyph = { 9, 7, stop_data };
  93. struct Glyph play_glyph = { 8, 7, play_data };
  94. struct Glyph rew_glyph  = { 17,7, rew_data  };
  95. struct Glyph ff_glyph   = { 17,7, ff_data   };
  96. struct Glyph pause_glyph= { 9, 7, pause_data};
  97.  
  98. struct NewMenu newmenu_TRANSP[] =
  99.   {
  100.   {NM_TITLE, (UBYTE *)MENUTEXT_CONTROL,    NULL,    0,    0,    NULL},
  101.   {NM_ITEM,  (UBYTE *)ITEMTEXT_SETCONDU,    NULL,    0,    0,    (APTR) &tmobjectdata_SETCONDU},
  102.   {NM_ITEM,  (UBYTE *)ITEMTEXT_ABOUT,    NULL,    0,    0,    (APTR) &tmobjectdata_ABOUT},
  103.   {NM_ITEM,  NM_BARLABEL,    NULL,    0,    0,    NULL},
  104.   {NM_ITEM,  (UBYTE *)ITEMTEXT_QUIT,    (UBYTE *)"Q",    0,    0,    (APTR) &tmobjectdata_QUIT},
  105.  
  106.   {NM_TITLE, (UBYTE *)MENUTEXT_PROJECT,    NULL,    0,    0,    NULL},
  107.   {NM_ITEM,  (UBYTE *)ITEMTEXT_RESETTOZ,    (UBYTE *)"0",    0,    0,    (APTR) &tmobjectdata_RESETTOZ},
  108.   {NM_ITEM,  (UBYTE *)ITEMTEXT_CLOCKTYP,    NULL,    NM_ITEMDISABLED,    0,    NULL},
  109.   {NM_SUB,   (UBYTE *)SUBTEXT_NTSCNOND,    (UBYTE *)"1",    CHECKIT | CHECKED,    0,    (APTR) &tmobjectdata_NTSCNOND},
  110.   {NM_SUB,   (UBYTE *)SUBTEXT_NTSCDROP,    (UBYTE *)"2",    CHECKIT,    0,    (APTR) &tmobjectdata_NTSCDROP},
  111.   {NM_SUB,   (UBYTE *)SUBTEXT_PAL25FPS,    (UBYTE *)"3",    CHECKIT,    0,    (APTR) &tmobjectdata_PAL25FPS},
  112.   {NM_SUB,   (UBYTE *)SUBTEXT_FILM24FP,    (UBYTE *)"4",    CHECKIT,    0,    (APTR) &tmobjectdata_FILM24FP},
  113.   {NM_ITEM,  NM_BARLABEL,    NULL,    0,    0,    NULL},
  114.   {NM_ITEM,  (UBYTE *)ITEMTEXT_POSITIVE,    NULL,    CHECKIT | CHECKED | MENUTOGGLE,    0,    (APTR) &tmobjectdata_POSITIVE},
  115.   {NM_ITEM,  (UBYTE *)ITEMTEXT_WAIT,        NULL,    CHECKIT | CHECKED | MENUTOGGLE,    0,    (APTR) &tmobjectdata_WAIT},
  116.  
  117.   {NM_END,   NULL,    NULL,    0,    0,    NULL}
  118.   };
  119.  
  120.  
  121. struct TextAttr topaz8 =
  122.   {
  123.   (STRPTR)"topaz.font",
  124.   8,
  125.   FS_NORMAL,
  126.   0x0
  127.   };
  128.  
  129. /****** trans_tm.c/TM_Request *****************************
  130. *
  131. *   NAME
  132. *    TM_Request -- display a message in a system requester.
  133. *
  134. *   SYNOPSIS
  135. *    num = TM_Request(Window, Title, TextFormat, GadgetFormat,
  136. *                     IDCMP_ptr, Arg1, Arg2, ...)
  137. *
  138. *    LONG TM_Request(struct Window *, UBYTE *, UBYTE *, UBYTE *,
  139. *                    ULONG *, APTR, ...);
  140. *
  141. *   FUNCTION
  142. *    Calls EasyRequestArgs to display a message in a system
  143. *    requester without having to fill in an EasyStruct structure.
  144. *    This function uses a varargs calling convention.
  145. *
  146. *    EasyRequestArgs has the capability to display more than one
  147. *    gadget by separating the GadgetText with the '|' character.
  148. *    Also printf style formatting may be used in the TextFormat
  149. *    and GadgetFormat strings.  The formatting arguments should
  150. *    be added first for the TextFormat, then for the GadgetFormat.
  151. *
  152. *   INPUTS
  153. *    Window = pointer to window (passed to EasyRequestArgs()).
  154. *    Title = title bar string (passed to EasyRequestArgs()).
  155. *    TextFormat = body text (passed to EasyRequestArgs()).
  156. *    GadgetFormat = gadget text (passed to EasyRequestArgs()).
  157. *    IDCMP_ptr = IDCMP value (passed to EasyRequestArgs()).
  158. *    Args = arguments (passed to EasyRequestArgs()).
  159. *
  160. *   RESULT
  161. *    num = gadget number returned by EasyRequestArgs().
  162. *
  163. *   EXAMPLE
  164. *    To display a requester with two choices:
  165. *
  166. *    result = TM_Request(NULL, "Question", "Are you sure?",
  167. *                        "OK|Cancel", NULL, NULL);
  168. *
  169. *   NOTES
  170. *    The intuition library must be open before calling this
  171. *    function.
  172. *
  173. *   BUGS
  174. *
  175. *   SEE ALSO
  176. *    intuition.library/EasyRequestArgs()
  177. *
  178. **************************************************************
  179. *
  180. */
  181. LONG TM_Request(struct Window *Window, UBYTE *Title, UBYTE *TextFormat, UBYTE *GadgetFormat, ULONG *IDCMP_ptr, APTR Arg1, ...)
  182.   {
  183.   struct EasyStruct es;
  184.  
  185.   es.es_StructSize = sizeof(struct EasyStruct);
  186.   es.es_Flags = 0;
  187.   es.es_Title = Title;
  188.   es.es_TextFormat = TextFormat;
  189.   es.es_GadgetFormat = GadgetFormat;
  190.  
  191.   return(EasyRequestArgs(Window, &es, IDCMP_ptr, &Arg1));
  192.   }
  193.  
  194. /****** trans_tm.c/TM_Open *****************************
  195. *
  196. *   NAME
  197. *    TM_Open -- initialize user-interface data.
  198. *
  199. *   SYNOPSIS
  200. *    TMData = TM_Open(ErrorCode)
  201. *
  202. *    struct TMData *TM_Open(ULONG *error);
  203. *
  204. *   FUNCTION
  205. *    Creates an initializes a TMData structure.  This
  206. *    includes allocating memory for a TMData structure,
  207. *    creating a message port for window IDCMP messages,
  208. *    and opening any fonts on disk.
  209. *
  210. *   INPUTS
  211. *    error = pointer to ULONG to store an error number.
  212. *            Error numbers are defined in the _tm.h file.
  213. *
  214. *   RESULT
  215. *    TMData = pointer to an initialized TMData structure
  216. *             or NULL if an error occurred.
  217. *
  218. *   EXAMPLE
  219. *    if(!(TMData = TM_Open(&error)))
  220. *      {
  221. *      switch(error)
  222. *        {
  223. *        case TMERR_MEMORY:
  224. *          TM_Request(NULL, "Error", "Out of memory", "Abort", NULL, NULL);
  225. *          break;
  226. *        case TMERR_MSGPORT:
  227. *          TM_Request(NULL, "Error", "Error creating\nmessage port", "Abort", NULL, NULL);
  228. *          break;
  229. *        }
  230. *      CleanExit(NULL, RETURN_FAIL);
  231. *      }
  232. *
  233. *   NOTES
  234. *    The intuition and gadtools libraries must be open before
  235. *    calling this function.  If any fonts other than topaz 8
  236. *    and topaz 9 are used, the diskfont and graphics libraries
  237. *    must also be open.
  238. *
  239. *   BUGS
  240. *
  241. *   SEE ALSO
  242. *    TM_Close()
  243. *
  244. **************************************************************
  245. *
  246. */
  247. struct TMData *TM_Open(ULONG *error)
  248. {
  249.     struct TMData *tmdata;
  250.  
  251.     if(tmdata = AllocMem(sizeof(struct TMData), MEMF_CLEAR))
  252.     {   tmdata->Size = sizeof(struct TMData);
  253.  
  254.         if(tmdata->WindowMsgPort = CreateMsgPort())
  255.         {
  256.             *error = TMERR_OK;
  257.             return(tmdata);
  258.         }
  259.         else
  260.         {
  261.             *error = TMERR_MSGPORT;
  262.         }
  263.  
  264.         FreeMem(tmdata, sizeof(struct TMData));
  265.     }
  266.     else
  267.     {
  268.         *error = TMERR_MEMORY;
  269.     }
  270.  
  271.     return(NULL);
  272. }
  273.  
  274. /****** trans_tm.c/TM_Close *****************************
  275. *
  276. *   NAME
  277. *    TM_Close -- frees user-interface data.
  278. *
  279. *   SYNOPSIS
  280. *    TM_Close(TMData)
  281. *
  282. *    VOID TM_Close(struct TMData *TMData);
  283. *
  284. *   FUNCTION
  285. *    Frees resources allocated by TM_Open().
  286. *
  287. *   INPUTS
  288. *    TMData = pointer to TMData structure returned by TM_Open.
  289. *
  290. *   RESULT
  291. *
  292. *   EXAMPLE
  293. *    if(TMData) TM_Close(TMData);
  294. *
  295. *   NOTES
  296. *
  297. *   BUGS
  298. *
  299. *   SEE ALSO
  300. *    TM_Open()
  301. *
  302. **************************************************************
  303. *
  304. */
  305. VOID TM_Close(struct TMData *TMData)
  306.   {
  307.  
  308.   if(TMData)
  309.     {
  310.     if(TMData->WindowMsgPort) DeleteMsgPort(TMData->WindowMsgPort);
  311.     FreeMem(TMData, TMData->Size);
  312.     }
  313.  
  314.   }
  315.  
  316. /****** trans_tm.c/TM_EventLoop *****************************
  317. *
  318. *   NAME
  319. *    TM_EventLoop -- waits for all events.
  320. *
  321. *   SYNOPSIS
  322. *    TM_EventLoop(TMData)
  323. *
  324. *    VOID TM_EventLoop(struct TMData *);
  325. *
  326. *   FUNCTION
  327. *    Waits for any events to signal program.  All IDCMP, ARexx,
  328. *    and a user signal messages received are sent to the
  329. *    appropriate signal function.  A return value of TRUE from
  330. *    any of the signal functions will terminate the loop.
  331. *
  332. *   INPUTS
  333. *    TMData = pointer to TMData structure returned by TM_Open.
  334. *
  335. *   RESULT
  336. *
  337. *   EXAMPLE
  338. *    TM_EventLoop(TMData);
  339. *
  340. *   NOTES
  341. *    An event signal must be set up before calling TM_EventLoop.
  342. *    Either a window must be open, the SimpleRexx option selected,
  343. *    or a user signal set up.
  344. *
  345. *   BUGS
  346. *
  347. *   SEE ALSO
  348. *    TM_WindowSignal(), TM_ARexxSignal(), exec.library/Wait()
  349. *
  350. **************************************************************
  351. *
  352. */
  353. VOID TM_EventLoop(struct TMData *TMData)
  354.   {
  355.   BOOL done=FALSE, result;
  356.   ULONG windowsignal, signals;
  357.  
  358.   windowsignal = 1L << TMData->WindowMsgPort->mp_SigBit;
  359.  
  360.   while(!done)
  361.     {
  362.     signals = Wait(windowsignal | SIGBREAKF_CTRL_E | SIGBREAKF_CTRL_F);
  363.  
  364.     if(signals & windowsignal)
  365.       {
  366.       if(result = TM_WindowSignal(TMData)) done = result;
  367.       }
  368.  
  369.     if(signals & (SIGBREAKF_CTRL_E|SIGBREAKF_CTRL_F))
  370.       {
  371.           HandleSignal(TMData, signals);
  372.       }
  373.     }
  374.   }
  375.  
  376. /****** trans_tm.c/OpenScreen_Workbench *****************************
  377. *
  378. *   NAME
  379. *    OpenScreen_Workbench -- Use the default public screen.
  380. *
  381. *   SYNOPSIS
  382. *    success = OpenScreen_Workbench(TMData)
  383. *
  384. *    BOOL OpenScreen_Workbench(struct TMData *);
  385. *
  386. *   FUNCTION
  387. *    Locks the default public screen and gets its visual info.  If the
  388. *    screen was already locked, it will be brought to front.
  389. *
  390. *   INPUTS
  391. *    TMData = pointer to the TMData structure returned by TM_Open.
  392. *
  393. *   RESULT
  394. *    success = TRUE if command was successfully completed.
  395. *              FALSE if not.
  396. *
  397. *   EXAMPLE
  398. *    if(!(OpenScreen_Workbench(TMData)))
  399. *      {
  400. *      TM_Request(NULL, "Error", "Error opening screen", "Abort", NULL, NULL);
  401. *      CleanExit(TMData, RETURN_FAIL);
  402. *      }
  403. *
  404. *   NOTES
  405. *
  406. *   BUGS
  407. *
  408. *   SEE ALSO
  409. *    CloseScreen_Workbench()
  410. *
  411. **************************************************************
  412. *
  413. */
  414. BOOL OpenScreen_Workbench(struct TMData *TMData)
  415.   {
  416.   if(ScreenInfo_Workbench.Screen)
  417.     {
  418.     ScreenToFront(ScreenInfo_Workbench.Screen);
  419.     return(TRUE);
  420.     }
  421.   else
  422.     {
  423.     if(ScreenInfo_Workbench.Screen = LockPubScreen(NULL))
  424.       {
  425.       if(ScreenInfo_Workbench.VisualInfo = GetVisualInfo(ScreenInfo_Workbench.Screen, TAG_DONE))
  426.         {
  427.         return(TRUE);
  428.         }
  429.       UnlockPubScreen(NULL, ScreenInfo_Workbench.Screen);
  430.       }
  431.     }
  432.  
  433.   return(FALSE);
  434.   }
  435.  
  436. /****** trans_tm.c/CloseScreen_Workbench *****************************
  437. *
  438. *   NAME
  439. *    CloseScreen_Workbench -- Free the default public screen.
  440. *
  441. *   SYNOPSIS
  442. *    CloseScreen_Workbench(TMData)
  443. *
  444. *    VOID CloseScreen_Workbench(struct TMData *);
  445. *
  446. *   FUNCTION
  447. *    Unlocks the default public screen and frees the visual info.
  448. *    It's ok to re-close a screen that is already closed.
  449. *
  450. *   INPUTS
  451. *    TMData = pointer to the TMData structure returned by TM_Open.
  452. *
  453. *   RESULT
  454. *
  455. *   EXAMPLE
  456. *    CloseScreen_Workbench(TMData);
  457. *
  458. *   NOTES
  459. *
  460. *   BUGS
  461. *
  462. *   SEE ALSO
  463. *    OpenScreen_Workbench()
  464. *
  465. **************************************************************
  466. *
  467. */
  468. VOID CloseScreen_Workbench(struct TMData *TMData)
  469.   {
  470.   if(ScreenInfo_Workbench.VisualInfo)
  471.     {
  472.     FreeVisualInfo(ScreenInfo_Workbench.VisualInfo);
  473.     ScreenInfo_Workbench.VisualInfo = NULL;
  474.     }
  475.   if(ScreenInfo_Workbench.Screen)
  476.     {
  477.     UnlockPubScreen(NULL, ScreenInfo_Workbench.Screen);
  478.     ScreenInfo_Workbench.Screen = NULL;
  479.     }
  480.   }
  481.  
  482. /****** trans_tm.c/OpenWindow_TRANSP *****************************
  483. *
  484. *   NAME
  485. *    OpenWindow_TRANSP -- Open window "TRANSP".
  486. *
  487. *   SYNOPSIS
  488. *    success = OpenWindow_TRANSP(TMData)
  489. *
  490. *    BOOL OpenWindow_TRANSP(struct TMData *);
  491. *
  492. *   FUNCTION
  493. *    Opens the window with label "TRANSP"
  494. *    along with any gadgets it contains.  If the window was already
  495. *    open, it will be brought to front.
  496. *
  497. *   INPUTS
  498. *    TMData = pointer to the TMData structure returned by TM_Open.
  499. *
  500. *   RESULT
  501. *    success = TRUE if command was successfully completed.
  502. *              FALSE if not.
  503. *
  504. *   EXAMPLE
  505. *    if(!OpenWindow_TRANSP(TMData))
  506. *      {
  507. *      TMRequest(NULL, "Error", "Error opening window", "Abort", NULL, NULL);
  508. *      CleanExit(TMData, RETURN_FAIL);
  509. *      }
  510. *   NOTES
  511. *
  512. *   BUGS
  513. *
  514. *   SEE ALSO
  515. *    CloseWindow_TRANSP()
  516. *
  517. **************************************************************
  518. *
  519. */
  520. BOOL OpenWindow_TRANSP(struct TMData *TMData)
  521.   {
  522.   ULONG lasttag;
  523.   struct NewGadget ng;
  524.  
  525.   if(WindowInfo_TRANSP.Window)
  526.     {
  527.     WindowToFront(WindowInfo_TRANSP.Window);
  528.     ActivateWindow(WindowInfo_TRANSP.Window);
  529.     return(TRUE);
  530.     }
  531.   else
  532.     {    extern Class    *box_class;
  533.  
  534.         /* create the BOOPSI images */
  535.  
  536.         Image_CLOCK = (struct Image *)NewObject(box_class,NULL,
  537.                     IA_Width,        125,
  538.                     IA_Height,        24,
  539.                     BOX_Filled,     FALSE,
  540.                     BOX_ThickBevel, TRUE,
  541.                     BOX_PushesIn,     FALSE,
  542.                     TAG_END );
  543.  
  544.         Image_PLAY = (struct Image *)NewObject(box_class,NULL,
  545.                     IA_Width,        48,
  546.                     IA_Height,        15,
  547.                     BOX_Filled,     TRUE,
  548.                     BOX_ThickBevel, TRUE,
  549.                     BOX_PushesIn,     TRUE,
  550.                     BOX_GlyphData,    play_glyph.data,
  551.                     BOX_GlyphWidth,    play_glyph.w,
  552.                     BOX_GlyphHeight,play_glyph.h,
  553.                     TAG_END );
  554.  
  555.         Image_STOP = (struct Image *)NewObject(box_class,NULL,
  556.                     IA_Width,        51,
  557.                     IA_Height,        15,
  558.                     BOX_Filled,     TRUE,
  559.                     BOX_ThickBevel, TRUE,
  560.                     BOX_PushesIn,     TRUE,
  561.                     BOX_GlyphData,    stop_glyph.data,
  562.                     BOX_GlyphWidth,    stop_glyph.w,
  563.                     BOX_GlyphHeight,stop_glyph.h,
  564.                     TAG_END );
  565.  
  566.         Image_REW = (struct Image *)NewObject(box_class,NULL,
  567.                     IA_Width,        27,
  568.                     IA_Height,        15,
  569.                     BOX_Filled,     TRUE,
  570.                     BOX_ThickBevel, TRUE,
  571.                     BOX_PushesIn,     TRUE,
  572.                     BOX_GlyphData,    rew_glyph.data,
  573.                     BOX_GlyphWidth,    rew_glyph.w,
  574.                     BOX_GlyphHeight,rew_glyph.h,
  575.                     TAG_END );
  576.  
  577.         Image_FF = (struct Image *)NewObject(box_class,NULL,
  578.                     IA_Width,        27,
  579.                     IA_Height,        15,
  580.                     BOX_Filled,     TRUE,
  581.                     BOX_ThickBevel, TRUE,
  582.                     BOX_PushesIn,     TRUE,
  583.                     BOX_GlyphData,    ff_glyph.data,
  584.                     BOX_GlyphWidth,    ff_glyph.w,
  585.                     BOX_GlyphHeight,ff_glyph.h,
  586.                     TAG_END );
  587.  
  588.         Image_PAUSE = (struct Image *)NewObject(box_class,NULL,
  589.                     IA_Width,        48,
  590.                     IA_Height,        15,
  591.                     BOX_Filled,     TRUE,
  592.                     BOX_ThickBevel, TRUE,
  593.                     BOX_PushesIn,     TRUE,
  594.                     BOX_GlyphData,    pause_glyph.data,
  595.                     BOX_GlyphWidth,    pause_glyph.w,
  596.                     BOX_GlyphHeight,pause_glyph.h,
  597.                     TAG_END );
  598.  
  599.     WindowInfo_TRANSP.FirstGadget = NULL;
  600.     WindowInfo_TRANSP.ContextGadget = CreateContext(&WindowInfo_TRANSP.FirstGadget);
  601.  
  602.     ng.ng_VisualInfo = ScreenInfo_Workbench.VisualInfo;
  603.  
  604.     ng.ng_LeftEdge = 8;
  605.     ng.ng_TopEdge = 3+ScreenInfo_Workbench.Screen->BarHeight;
  606.     ng.ng_Width = 27;
  607.     ng.ng_Height = 15;
  608.     ng.ng_Flags = PLACETEXT_IN;
  609.     ng.ng_TextAttr = &topaz8;
  610.     ng.ng_GadgetText = NULL;
  611.     ng.ng_GadgetID = ID_REW;
  612.     ng.ng_UserData = (APTR) &tmobjectdata_REW;
  613.     lasttag = GadgetInfo_REW.MoreTags ? TAG_MORE : TAG_DONE;
  614.     GadgetInfo_REW.Gadget = CreateGadget(GENERIC_KIND, WindowInfo_TRANSP.ContextGadget, &ng,
  615.         lasttag, GadgetInfo_REW.MoreTags);
  616.  
  617.     GadgetInfo_REW.Gadget->GadgetRender =
  618.         GadgetInfo_REW.Gadget->SelectRender = (APTR)Image_REW;
  619.     GadgetInfo_REW.Gadget->Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
  620.     GadgetInfo_REW.Gadget->Activation |= GACT_RELVERIFY|GACT_IMMEDIATE;
  621.  
  622.     ng.ng_TopEdge = 19+ScreenInfo_Workbench.Screen->BarHeight;
  623.     ng.ng_Width = 125;
  624.     ng.ng_Height = 24;
  625.     ng.ng_GadgetText = NULL;
  626.     ng.ng_GadgetID = ID_CLOCK;
  627.     ng.ng_UserData = (APTR) &tmobjectdata_CLOCK;
  628.     lasttag = GadgetInfo_CLOCK.MoreTags ? TAG_MORE : TAG_DONE;
  629.     GadgetInfo_CLOCK.Gadget = CreateGadget(GENERIC_KIND, GadgetInfo_REW.Gadget, &ng,
  630.         lasttag, GadgetInfo_CLOCK.MoreTags);
  631.  
  632.     GadgetInfo_CLOCK.Gadget->GadgetRender =
  633.         GadgetInfo_CLOCK.Gadget->SelectRender = (APTR)Image_CLOCK;
  634.     GadgetInfo_CLOCK.Gadget->Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
  635.     GadgetInfo_CLOCK.Gadget->Activation |= GACT_RELVERIFY|GACT_IMMEDIATE;
  636.  
  637.     ng.ng_LeftEdge = 35;
  638.     ng.ng_TopEdge = 3+ScreenInfo_Workbench.Screen->BarHeight;
  639.     ng.ng_Width = 48;
  640.     ng.ng_Height = 15;
  641.     ng.ng_GadgetText = NULL;
  642.     ng.ng_GadgetID = ID_PLAY;
  643.     ng.ng_UserData = (APTR) &tmobjectdata_PLAY;
  644.     lasttag = GadgetInfo_PLAY.MoreTags ? TAG_MORE : TAG_DONE;
  645.     GadgetInfo_PLAY.Gadget = CreateGadget(GENERIC_KIND, GadgetInfo_CLOCK.Gadget, &ng,
  646.         lasttag, GadgetInfo_PLAY.MoreTags);
  647.  
  648.     GadgetInfo_PLAY.Gadget->GadgetRender =
  649.         GadgetInfo_PLAY.Gadget->SelectRender = (APTR)Image_PLAY;
  650.     GadgetInfo_PLAY.Gadget->Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
  651.     GadgetInfo_PLAY.Gadget->Activation |= GACT_RELVERIFY|GACT_TOGGLESELECT;
  652.  
  653.     ng.ng_LeftEdge = 83;
  654.     ng.ng_Width = 27;
  655.     ng.ng_GadgetText = NULL;
  656.     ng.ng_GadgetID = ID_FF;
  657.     ng.ng_UserData = (APTR) &tmobjectdata_FF;
  658.     lasttag = GadgetInfo_FF.MoreTags ? TAG_MORE : TAG_DONE;
  659.     GadgetInfo_FF.Gadget = CreateGadget(GENERIC_KIND, GadgetInfo_PLAY.Gadget, &ng,
  660.         lasttag, GadgetInfo_FF.MoreTags);
  661.  
  662.     GadgetInfo_FF.Gadget->GadgetRender =
  663.         GadgetInfo_FF.Gadget->SelectRender = (APTR)Image_FF;
  664.     GadgetInfo_FF.Gadget->Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
  665.     GadgetInfo_FF.Gadget->Activation |= GACT_RELVERIFY|GACT_IMMEDIATE;
  666.  
  667.     ng.ng_LeftEdge = 110;
  668.     ng.ng_Width = 51;
  669.     ng.ng_GadgetText = NULL;
  670.     ng.ng_GadgetID = ID_STOP;
  671.     ng.ng_UserData = (APTR) &tmobjectdata_STOP;
  672.     lasttag = GadgetInfo_STOP.MoreTags ? TAG_MORE : TAG_DONE;
  673.     GadgetInfo_STOP.Gadget = CreateGadget(GENERIC_KIND, GadgetInfo_FF.Gadget, &ng,
  674.         lasttag, GadgetInfo_STOP.MoreTags);
  675.  
  676.     GadgetInfo_STOP.Gadget->GadgetRender =
  677.         GadgetInfo_STOP.Gadget->SelectRender = (APTR)Image_STOP;
  678.     GadgetInfo_STOP.Gadget->Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
  679.     GadgetInfo_STOP.Gadget->Activation |= GACT_RELVERIFY|GACT_TOGGLESELECT;
  680.  
  681.     ng.ng_LeftEdge = 136;
  682.     ng.ng_TopEdge = 31+ScreenInfo_Workbench.Screen->BarHeight;
  683.     ng.ng_Width = 76;
  684.     ng.ng_Height = 12;
  685.     ng.ng_Flags = PLACETEXT_ABOVE;
  686.     ng.ng_GadgetText = (UBYTE *)GADGETTEXT_STATUS;
  687.     ng.ng_GadgetID = 0;
  688.     ng.ng_UserData = NULL;
  689.     lasttag = GadgetInfo_STATUS.MoreTags ? TAG_MORE : TAG_DONE;
  690.     GadgetInfo_STATUS.Gadget = CreateGadget(TEXT_KIND, GadgetInfo_STOP.Gadget, &ng,
  691.         GTTX_Border, TRUE,
  692.         GTTX_Text, GTTX_Text_STATUS,
  693.         lasttag, GadgetInfo_STATUS.MoreTags);
  694.  
  695.     ng.ng_LeftEdge = 164;
  696.     ng.ng_TopEdge = 3+ScreenInfo_Workbench.Screen->BarHeight;
  697.     ng.ng_Width = 48;
  698.     ng.ng_Height = 15;
  699.     ng.ng_Flags = PLACETEXT_IN;
  700.     ng.ng_GadgetText = NULL;
  701.     ng.ng_GadgetID = ID_PAUSE;
  702.     ng.ng_UserData = (APTR) &tmobjectdata_PAUSE;
  703.     lasttag = GadgetInfo_PAUSE.MoreTags ? TAG_MORE : TAG_DONE;
  704.     GadgetInfo_PAUSE.Gadget = CreateGadget(GENERIC_KIND, GadgetInfo_STATUS.Gadget, &ng,
  705.         lasttag, GadgetInfo_PAUSE.MoreTags);
  706.  
  707.     GadgetInfo_PAUSE.Gadget->GadgetRender =
  708.         GadgetInfo_PAUSE.Gadget->SelectRender = (APTR)Image_PAUSE;
  709.     GadgetInfo_PAUSE.Gadget->Flags = GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
  710.     GadgetInfo_PAUSE.Gadget->Activation |= GACT_RELVERIFY|GACT_TOGGLESELECT;
  711.  
  712.     if(GadgetInfo_PAUSE.Gadget)
  713.       {
  714.       lasttag = WindowInfo_TRANSP.MoreTags ? TAG_MORE : TAG_DONE;
  715.  
  716.       if((WindowInfo_TRANSP.Window = OpenWindowTags(NULL,
  717.         WA_PubScreen, ScreenInfo_Workbench.Screen,
  718.         WA_Title, WINDOWTEXT_TRANSP,
  719.         WA_IDCMP, NULL,
  720.         WA_Gadgets, WindowInfo_TRANSP.FirstGadget,
  721.         WA_Left, 135,
  722.         WA_Top, 36,
  723.         WA_InnerWidth, 214,
  724.         WA_InnerHeight, 44,
  725.         WA_AutoAdjust, TRUE,
  726.         WA_DragBar, TRUE,
  727.         WA_CloseGadget, TRUE,
  728.         WA_DepthGadget, TRUE,
  729.         WA_Activate, TRUE,
  730.         WA_ScreenTitle, WA_ScreenTitle_TRANSP,
  731.         WA_SimpleRefresh, TRUE,
  732.         lasttag, WindowInfo_TRANSP.MoreTags)))
  733.         {
  734.         if((WindowInfo_TRANSP.Menu = CreateMenus(newmenu_TRANSP, TAG_DONE)))
  735.           {
  736.           if((LayoutMenus(WindowInfo_TRANSP.Menu, ScreenInfo_Workbench.VisualInfo, TAG_DONE)))
  737.             {
  738.             if((SetMenuStrip(WindowInfo_TRANSP.Window, WindowInfo_TRANSP.Menu)))
  739.               {
  740.               WindowInfo_TRANSP.Window->UserPort = TMData->WindowMsgPort;
  741.               ModifyIDCMP(WindowInfo_TRANSP.Window,
  742.             IDCMP_REFRESHWINDOW |
  743.             BUTTONIDCMP |
  744.             IDCMP_MOUSEMOVE |
  745.             IDCMP_MOUSEBUTTONS |
  746.             IDCMP_GADGETDOWN |
  747.             IDCMP_GADGETUP |
  748.             IDCMP_MENUPICK |
  749.             IDCMP_CLOSEWINDOW |
  750.             IDCMP_INTUITICKS |
  751.             IDCMP_IDCMPUPDATE);
  752.               GT_RefreshWindow(WindowInfo_TRANSP.Window, NULL);
  753.               WindowInfo_TRANSP.Flags |= TMWF_OPENED;
  754.  
  755.               RefreshWindow_TRANSP(TMData);
  756.  
  757.               return(TRUE);
  758.               }
  759.             }
  760.           FreeMenus(WindowInfo_TRANSP.Menu);
  761.           }
  762.         CloseWindow(WindowInfo_TRANSP.Window);
  763.         }
  764.       FreeGadgets(WindowInfo_TRANSP.FirstGadget);
  765.       }
  766.     }
  767.   return(FALSE);
  768.   }
  769.  
  770. /****** trans_tm.c/CloseWindow_TRANSP *****************************
  771. *
  772. *   NAME
  773. *    CloseWindow_TRANSP -- Close window "TRANSP".
  774. *
  775. *   SYNOPSIS
  776. *    CloseWindow_TRANSP(TMData)
  777. *
  778. *    VOID CloseWindow_TRANSP(struct TMData *);
  779. *
  780. *   FUNCTION
  781. *    Closes the window with label "TRANSP"
  782. *    and frees its resources.  It's ok to re-close a window
  783. *    that is already closed.
  784. *
  785. *   INPUTS
  786. *    TMData = pointer to the TMData structure returned by TM_Open.
  787. *
  788. *   RESULT
  789. *
  790. *   EXAMPLE
  791. *
  792. *   NOTES
  793. *
  794. *   BUGS
  795. *
  796. *   SEE ALSO
  797. *    OpenWindow_TRANSP()
  798. *
  799. **************************************************************
  800. *
  801. */
  802. VOID CloseWindow_TRANSP(struct TMData *TMData)
  803.   {
  804.   TM_RemoveWindow(&WindowInfo_TRANSP);
  805.  
  806.     if (Image_CLOCK) { DisposeObject (Image_CLOCK); Image_CLOCK = NULL; }
  807.     if (Image_PLAY)  { DisposeObject (Image_PLAY); Image_PLAY = NULL; }
  808.     if (Image_STOP)  { DisposeObject (Image_STOP); Image_STOP = NULL; }
  809.     if (Image_REW)   { DisposeObject (Image_REW); Image_REW = NULL; }
  810.     if (Image_FF)    { DisposeObject (Image_FF); Image_FF = NULL; }
  811.     if (Image_PAUSE) { DisposeObject (Image_PAUSE); Image_PAUSE = NULL; }
  812.   }
  813.  
  814. /****** trans_tm.c/DisableWindow_TRANSP *****************************
  815. *
  816. *   NAME
  817. *    DisableWindow_TRANSP -- disable input to window "TRANSP".
  818. *
  819. *   SYNOPSIS
  820. *    DisableWindow_TRANSP(TMData)
  821. *
  822. *    VOID DisableWindow_TRANSP(struct TMData *);
  823. *
  824. *   FUNCTION
  825. *    Disables all input to window with label "TRANSP"
  826. *    and changes its mouse pointer.
  827. *
  828. *   INPUTS
  829. *    TMData = pointer to the TMData structure returned by TM_Open.
  830. *
  831. *   RESULT
  832. *
  833. *   EXAMPLE
  834. *
  835. *   NOTES
  836. *
  837. *   BUGS
  838. *
  839. *   SEE ALSO
  840. *    EnableWindow_TRANSP()
  841. *
  842. **************************************************************
  843. *
  844. */
  845. VOID DisableWindow_TRANSP(struct TMData *TMData)
  846.   {
  847.   if((WindowInfo_TRANSP.DisableCount == 0) && (WindowInfo_TRANSP.Flags & TMWF_OPENED))
  848.     {
  849.     InitRequester(&WindowInfo_TRANSP.Requester);
  850.     if(Request(&WindowInfo_TRANSP.Requester, WindowInfo_TRANSP.Window))
  851.       {
  852.       WindowInfo_TRANSP.Flags |= TMWF_DISABLED;
  853.       SetPointer(WindowInfo_TRANSP.Window, WaitPointer, 16, 16, -6, 0);
  854.       }
  855.     }
  856.   WindowInfo_TRANSP.DisableCount++;
  857.   }
  858.  
  859. /****** trans_tm.c/EnableWindow_TRANSP *****************************
  860. *
  861. *   NAME
  862. *    EnableWindow_TRANSP -- enable input to window "TRANSP".
  863. *
  864. *   SYNOPSIS
  865. *    EnableWindow_TRANSP(TMData)
  866. *
  867. *    VOID EnableWindow_TRANSP(struct TMData *);
  868. *
  869. *   FUNCTION
  870. *    Enables input to window with label "TRANSP"
  871. *    and clears its mouse pointer.
  872. *
  873. *   INPUTS
  874. *    TMData = pointer to the TMData structure returned by TM_Open.
  875. *
  876. *   RESULT
  877. *
  878. *   EXAMPLE
  879. *
  880. *   NOTES
  881. *
  882. *   BUGS
  883. *
  884. *   SEE ALSO
  885. *    DisableWindow_TRANSP()
  886. *
  887. **************************************************************
  888. *
  889. */
  890. VOID EnableWindow_TRANSP(struct TMData *TMData)
  891.   {
  892.   WindowInfo_TRANSP.DisableCount--;
  893.   if((WindowInfo_TRANSP.DisableCount == 0) && (WindowInfo_TRANSP.Flags & (TMWF_DISABLED | TMWF_OPENED)))
  894.     {
  895.     EndRequest(&WindowInfo_TRANSP.Requester, WindowInfo_TRANSP.Window);
  896.     WindowInfo_TRANSP.Flags &= ~TMWF_DISABLED;
  897.     ClearPointer(WindowInfo_TRANSP.Window);
  898.     }
  899.   }
  900.  
  901. /****** trans_tm.c/OpenWindow_SELECTCO *****************************
  902. *
  903. *   NAME
  904. *    OpenWindow_SELECTCO -- Open window "SELECTCO".
  905. *
  906. *   SYNOPSIS
  907. *    success = OpenWindow_SELECTCO(TMData)
  908. *
  909. *    BOOL OpenWindow_SELECTCO(struct TMData *);
  910. *
  911. *   FUNCTION
  912. *    Opens the window with label "SELECTCO"
  913. *    along with any gadgets it contains.  If the window was already
  914. *    open, it will be brought to front.
  915. *
  916. *   INPUTS
  917. *    TMData = pointer to the TMData structure returned by TM_Open.
  918. *
  919. *   RESULT
  920. *    success = TRUE if command was successfully completed.
  921. *              FALSE if not.
  922. *
  923. *   EXAMPLE
  924. *    if(!OpenWindow_SELECTCO(TMData))
  925. *      {
  926. *      TMRequest(NULL, "Error", "Error opening window", "Abort", NULL, NULL);
  927. *      CleanExit(TMData, RETURN_FAIL);
  928. *      }
  929. *   NOTES
  930. *
  931. *   BUGS
  932. *
  933. *   SEE ALSO
  934. *    CloseWindow_SELECTCO()
  935. *
  936. **************************************************************
  937. *
  938. */
  939. BOOL OpenWindow_SELECTCO(struct TMData *TMData)
  940.   {
  941.   ULONG lasttag;
  942.   struct NewGadget ng;
  943.  
  944.     GetConductorList( &CDTList );
  945.  
  946.   if(WindowInfo_SELECTCO.Window)
  947.     {
  948.     WindowToFront(WindowInfo_SELECTCO.Window);
  949.     ActivateWindow(WindowInfo_SELECTCO.Window);
  950.     return(TRUE);
  951.     }
  952.   else
  953.     {
  954.     WindowInfo_SELECTCO.FirstGadget = NULL;
  955.     WindowInfo_SELECTCO.ContextGadget = CreateContext(&WindowInfo_SELECTCO.FirstGadget);
  956.  
  957.     ng.ng_VisualInfo = ScreenInfo_Workbench.VisualInfo;
  958.  
  959.     ng.ng_TextAttr = &topaz8;
  960.     ng.ng_TopEdge = 79+ScreenInfo_Workbench.Screen->BarHeight;
  961.     ng.ng_LeftEdge = 8;
  962.     ng.ng_Width = 198;
  963.     ng.ng_Height = 12;
  964.     ng.ng_Flags = PLACETEXT_LEFT;
  965.     ng.ng_GadgetText = (UBYTE *)GADGETTEXT_NEWCON;
  966.     ng.ng_GadgetID = ID_NEWCON;
  967.     ng.ng_UserData = (APTR) &tmobjectdata_NEWCON;
  968.     lasttag = GadgetInfo_NEWCON.MoreTags ? TAG_MORE : TAG_DONE;
  969.     GadgetInfo_NEWCON.Gadget = CreateGadget(STRING_KIND, WindowInfo_SELECTCO.ContextGadget, &ng,
  970.     /*    GTST_String, GTST_String_NEWCON, */
  971.         GTST_MaxChars, 32,
  972.         lasttag, GadgetInfo_NEWCON.MoreTags);
  973.  
  974.     ng.ng_TopEdge = 3+ScreenInfo_Workbench.Screen->BarHeight;
  975.     ng.ng_Height = 80;
  976.     ng.ng_Flags = PLACETEXT_ABOVE;
  977.     ng.ng_GadgetText = (UBYTE *)GADGETTEXT_CLIST;
  978.     ng.ng_GadgetID = ID_CLIST;
  979.     ng.ng_UserData = (APTR) &tmobjectdata_CLIST;
  980.     lasttag = GadgetInfo_CLIST.MoreTags ? TAG_MORE : TAG_DONE;
  981.     GadgetInfo_CLIST.Gadget = CreateGadget(LISTVIEW_KIND, GadgetInfo_NEWCON.Gadget, &ng,
  982.     /*    GTLV_ShowSelected, &GadgetInfo_NEWCON.Gadget, */
  983.         GTLV_Labels, &CDTList,
  984.         lasttag, GadgetInfo_CLIST.MoreTags);
  985.  
  986.     ng.ng_TopEdge = 93+ScreenInfo_Workbench.Screen->BarHeight;
  987.     ng.ng_Width = 90;
  988.     ng.ng_Height = 14;
  989.     ng.ng_Flags = PLACETEXT_IN;
  990.     ng.ng_GadgetText = (UBYTE *)GADGETTEXT_SELECT;
  991.     ng.ng_GadgetID = ID_SELECT;
  992.     ng.ng_UserData = (APTR) &tmobjectdata_SELECT;
  993.     lasttag = GadgetInfo_SELECT.MoreTags ? TAG_MORE : TAG_DONE;
  994.     GadgetInfo_SELECT.Gadget = CreateGadget(BUTTON_KIND, GadgetInfo_CLIST.Gadget, &ng,
  995.         lasttag, GadgetInfo_SELECT.MoreTags);
  996.  
  997.     ng.ng_LeftEdge = 116;
  998.     ng.ng_GadgetText = (UBYTE *)GADGETTEXT_CANCEL;
  999.     ng.ng_GadgetID = ID_CANCEL;
  1000.     ng.ng_UserData = (APTR) &tmobjectdata_CANCEL;
  1001.     lasttag = GadgetInfo_CANCEL.MoreTags ? TAG_MORE : TAG_DONE;
  1002.     GadgetInfo_CANCEL.Gadget = CreateGadget(BUTTON_KIND, GadgetInfo_SELECT.Gadget, &ng,
  1003.         lasttag, GadgetInfo_CANCEL.MoreTags);
  1004.  
  1005.     if(GadgetInfo_CANCEL.Gadget)
  1006.       {
  1007.       lasttag = WindowInfo_SELECTCO.MoreTags ? TAG_MORE : TAG_DONE;
  1008.  
  1009.       if((WindowInfo_SELECTCO.Window = OpenWindowTags(NULL,
  1010.         WA_PubScreen, ScreenInfo_Workbench.Screen,
  1011.         WA_Title, WINDOWTEXT_SELECTCO,
  1012.         WA_IDCMP, NULL,
  1013.         WA_Gadgets, WindowInfo_SELECTCO.FirstGadget,
  1014.         WA_Left, 138,
  1015.         WA_Top, 96,
  1016.         WA_InnerWidth, 207,
  1017.         WA_InnerHeight, 108,
  1018.         WA_AutoAdjust, TRUE,
  1019.         WA_DragBar, TRUE,
  1020.         WA_DepthGadget, TRUE,
  1021.         WA_Activate, TRUE,
  1022.         WA_SimpleRefresh, TRUE,
  1023.         lasttag, WindowInfo_SELECTCO.MoreTags)))
  1024.         {
  1025.         WindowInfo_SELECTCO.Window->UserPort = TMData->WindowMsgPort;
  1026.         ModifyIDCMP(WindowInfo_SELECTCO.Window,
  1027.             IDCMP_REFRESHWINDOW |
  1028.             LISTVIEWIDCMP |
  1029.             STRINGIDCMP |
  1030.             BUTTONIDCMP |
  1031.             IDCMP_GADGETDOWN |
  1032.             IDCMP_GADGETUP |
  1033.             IDCMP_CLOSEWINDOW);
  1034.         GT_RefreshWindow(WindowInfo_SELECTCO.Window, NULL);
  1035.         WindowInfo_SELECTCO.Flags |= TMWF_OPENED;
  1036.         ShowConductorName( TMData );
  1037.         return(TRUE);
  1038.         }
  1039.       FreeGadgets(WindowInfo_SELECTCO.FirstGadget);
  1040.       }
  1041.     }
  1042.   return(FALSE);
  1043.   }
  1044.  
  1045. /****** trans_tm.c/CloseWindow_SELECTCO *****************************
  1046. *
  1047. *   NAME
  1048. *    CloseWindow_SELECTCO -- Close window "SELECTCO".
  1049. *
  1050. *   SYNOPSIS
  1051. *    CloseWindow_SELECTCO(TMData)
  1052. *
  1053. *    VOID CloseWindow_SELECTCO(struct TMData *);
  1054. *
  1055. *   FUNCTION
  1056. *    Closes the window with label "SELECTCO"
  1057. *    and frees its resources.  It's ok to re-close a window
  1058. *    that is already closed.
  1059. *
  1060. *   INPUTS
  1061. *    TMData = pointer to the TMData structure returned by TM_Open.
  1062. *
  1063. *   RESULT
  1064. *
  1065. *   EXAMPLE
  1066. *
  1067. *   NOTES
  1068. *
  1069. *   BUGS
  1070. *
  1071. *   SEE ALSO
  1072. *    OpenWindow_SELECTCO()
  1073. *
  1074. **************************************************************
  1075. *
  1076. */
  1077. VOID CloseWindow_SELECTCO(struct TMData *TMData)
  1078.   {
  1079.   TM_RemoveWindow(&WindowInfo_SELECTCO);
  1080.   EnableWindow_TRANSP(TMData);
  1081.     FreeConductorList( &CDTList );
  1082.   }
  1083.  
  1084. /****** trans_tm.c/DisableWindow_SELECTCO *****************************
  1085. *
  1086. *   NAME
  1087. *    DisableWindow_SELECTCO -- disable input to window "SELECTCO".
  1088. *
  1089. *   SYNOPSIS
  1090. *    DisableWindow_SELECTCO(TMData)
  1091. *
  1092. *    VOID DisableWindow_SELECTCO(struct TMData *);
  1093. *
  1094. *   FUNCTION
  1095. *    Disables all input to window with label "SELECTCO"
  1096. *    and changes its mouse pointer.
  1097. *
  1098. *   INPUTS
  1099. *    TMData = pointer to the TMData structure returned by TM_Open.
  1100. *
  1101. *   RESULT
  1102. *
  1103. *   EXAMPLE
  1104. *
  1105. *   NOTES
  1106. *
  1107. *   BUGS
  1108. *
  1109. *   SEE ALSO
  1110. *    EnableWindow_SELECTCO()
  1111. *
  1112. **************************************************************
  1113. *
  1114. */
  1115. VOID DisableWindow_SELECTCO(struct TMData *TMData)
  1116.   {
  1117.   if((WindowInfo_SELECTCO.DisableCount == 0) && (WindowInfo_SELECTCO.Flags & TMWF_OPENED))
  1118.     {
  1119.     InitRequester(&WindowInfo_SELECTCO.Requester);
  1120.     if(Request(&WindowInfo_SELECTCO.Requester, WindowInfo_SELECTCO.Window))
  1121.       {
  1122.       WindowInfo_SELECTCO.Flags |= TMWF_DISABLED;
  1123.       SetPointer(WindowInfo_SELECTCO.Window, WaitPointer, 16, 16, -6, 0);
  1124.       }
  1125.     }
  1126.   WindowInfo_SELECTCO.DisableCount++;
  1127.   }
  1128.  
  1129. /****** trans_tm.c/EnableWindow_SELECTCO *****************************
  1130. *
  1131. *   NAME
  1132. *    EnableWindow_SELECTCO -- enable input to window "SELECTCO".
  1133. *
  1134. *   SYNOPSIS
  1135. *    EnableWindow_SELECTCO(TMData)
  1136. *
  1137. *    VOID EnableWindow_SELECTCO(struct TMData *);
  1138. *
  1139. *   FUNCTION
  1140. *    Enables input to window with label "SELECTCO"
  1141. *    and clears its mouse pointer.
  1142. *
  1143. *   INPUTS
  1144. *    TMData = pointer to the TMData structure returned by TM_Open.
  1145. *
  1146. *   RESULT
  1147. *
  1148. *   EXAMPLE
  1149. *
  1150. *   NOTES
  1151. *
  1152. *   BUGS
  1153. *
  1154. *   SEE ALSO
  1155. *    DisableWindow_SELECTCO()
  1156. *
  1157. **************************************************************
  1158. *
  1159. */
  1160. VOID EnableWindow_SELECTCO(struct TMData *TMData)
  1161.   {
  1162.   WindowInfo_SELECTCO.DisableCount--;
  1163.   if((WindowInfo_SELECTCO.DisableCount == 0) && (WindowInfo_SELECTCO.Flags & (TMWF_DISABLED | TMWF_OPENED)))
  1164.     {
  1165.     EndRequest(&WindowInfo_SELECTCO.Requester, WindowInfo_SELECTCO.Window);
  1166.     WindowInfo_SELECTCO.Flags &= ~TMWF_DISABLED;
  1167.     ClearPointer(WindowInfo_SELECTCO.Window);
  1168.     }
  1169.   }
  1170.  
  1171. static BOOL TM_WindowSignal(struct TMData *TMData)
  1172.   {
  1173.   BOOL done=FALSE;
  1174.   BOOL result;
  1175.   struct IntuiMessage *imessage;
  1176.  
  1177.   while(imessage = GT_GetIMsg(TMData->WindowMsgPort))
  1178.     {
  1179.     if(imessage->IDCMPWindow == WindowInfo_TRANSP.Window)
  1180.       {
  1181.       WindowInfo_TRANSP.GT_IMsg = imessage;
  1182.       if(result = WindowIDCMP_TRANSP(TMData, imessage)) done = result;
  1183.       if(WindowInfo_TRANSP.GT_IMsg)
  1184.         {
  1185.         GT_ReplyIMsg(WindowInfo_TRANSP.GT_IMsg);
  1186.         WindowInfo_TRANSP.GT_IMsg = NULL;
  1187.         }
  1188.       }
  1189.     else if(imessage->IDCMPWindow == WindowInfo_SELECTCO.Window)
  1190.       {
  1191.       WindowInfo_SELECTCO.GT_IMsg = imessage;
  1192.       if(result = WindowIDCMP_SELECTCO(TMData, imessage)) done = result;
  1193.       if(WindowInfo_SELECTCO.GT_IMsg)
  1194.         {
  1195.         GT_ReplyIMsg(WindowInfo_SELECTCO.GT_IMsg);
  1196.         WindowInfo_SELECTCO.GT_IMsg = NULL;
  1197.         }
  1198.       }
  1199.     }
  1200.  
  1201.   return(done);
  1202.   }
  1203.  
  1204. static BOOL WindowIDCMP_TRANSP(struct TMData *TMData, struct IntuiMessage *imessage)
  1205.   {
  1206.   BOOL done=FALSE;
  1207.   BOOL result;
  1208.  
  1209.   switch(imessage->Class)
  1210.     {
  1211.     case IDCMP_REFRESHWINDOW:
  1212.       GT_BeginRefresh(WindowInfo_TRANSP.Window);
  1213.  
  1214.       RefreshWindow_TRANSP(TMData);
  1215.  
  1216.       GT_EndRefresh(WindowInfo_TRANSP.Window, TRUE);
  1217.       break;
  1218.  
  1219.     case IDCMP_MENUPICK:
  1220.       if(result = Window_TRANSP_MENUPICK(TMData, imessage)) done = result;
  1221.       break;
  1222.  
  1223.     case IDCMP_GADGETDOWN:
  1224.       if(result = Window_TRANSP_GADGETDOWN(TMData, imessage)) done = result;
  1225.       break;
  1226.  
  1227.     case IDCMP_GADGETUP:
  1228.       if(result = Window_TRANSP_GADGETUP(TMData, imessage)) done = result;
  1229.       break;
  1230.  
  1231.     case IDCMP_CLOSEWINDOW:
  1232.       if(result = Window_TRANSP_CLOSEWINDOW(TMData, imessage)) done = result;
  1233.       break;
  1234.  
  1235.     case IDCMP_MOUSEMOVE:
  1236.       if(result = Window_TRANSP_MOUSEMOVE(TMData, imessage)) done = result;
  1237.       break;
  1238.  
  1239.     case IDCMP_MOUSEBUTTONS:
  1240.       if(result = Window_TRANSP_MOUSEUP(TMData, imessage)) done = result;
  1241.       break;
  1242.  
  1243.     case IDCMP_INTUITICKS:
  1244.       if(result = Window_TRANSP_INTUITICKS(TMData, imessage)) done = result;
  1245.       break;
  1246.  
  1247.     case IDCMP_IDCMPUPDATE:
  1248.       if(result = Window_TRANSP_IDCMPUPDATE(TMData, imessage)) done = result;
  1249.       break;
  1250.  
  1251.     }
  1252.  
  1253.   return(done);
  1254.   }
  1255.  
  1256. static BOOL WindowIDCMP_SELECTCO(struct TMData *TMData, struct IntuiMessage *imessage)
  1257.   {
  1258.   BOOL done=FALSE;
  1259.   BOOL result;
  1260.  
  1261.   switch(imessage->Class)
  1262.     {
  1263.     case IDCMP_REFRESHWINDOW:
  1264.       GT_BeginRefresh(WindowInfo_SELECTCO.Window);
  1265.       GT_EndRefresh(WindowInfo_SELECTCO.Window, TRUE);
  1266.       break;
  1267.  
  1268.     case IDCMP_GADGETDOWN:
  1269.       if(result = Window_SELECTCO_GADGETDOWN(TMData, imessage)) done = result;
  1270.       break;
  1271.  
  1272.     case IDCMP_GADGETUP:
  1273.       if(result = Window_SELECTCO_GADGETUP(TMData, imessage)) done = result;
  1274.       break;
  1275.  
  1276.     case IDCMP_CLOSEWINDOW:
  1277.       if(result = Window_SELECTCO_CLOSEWINDOW(TMData, imessage)) done = result;
  1278.       break;
  1279.  
  1280.     }
  1281.  
  1282.   return(done);
  1283.   }
  1284.  
  1285. static VOID TM_RemoveWindow(struct TMWindowInfo *TMWindowInfo)
  1286.   {
  1287.   struct IntuiMessage *imessage;
  1288.   struct Node *succ;
  1289.  
  1290.   if(TMWindowInfo->Window)
  1291.     {
  1292.     if(TMWindowInfo->Menu)
  1293.       {
  1294.       ClearMenuStrip(TMWindowInfo->Window);
  1295.       FreeMenus(TMWindowInfo->Menu);
  1296.       TMWindowInfo->Menu = NULL;
  1297.       }
  1298.  
  1299.     if(TMWindowInfo->GT_IMsg)
  1300.       {
  1301.       GT_ReplyIMsg(TMWindowInfo->GT_IMsg);
  1302.       TMWindowInfo->GT_IMsg = NULL;
  1303.       }
  1304.  
  1305.     if(TMWindowInfo->Window->UserPort)
  1306.       {
  1307.       Forbid();
  1308.       imessage = (struct IntuiMessage *) TMWindowInfo->Window->UserPort->mp_MsgList.lh_Head;
  1309.       while(succ = imessage->ExecMessage.mn_Node.ln_Succ)
  1310.         {
  1311.         if(imessage->IDCMPWindow == TMWindowInfo->Window)
  1312.           {
  1313.           Remove((struct Node *) imessage);
  1314.           ReplyMsg((struct Message *) imessage);
  1315.           }
  1316.         imessage = (struct IntuiMessage *) succ;
  1317.         }
  1318.       TMWindowInfo->Window->UserPort = NULL;
  1319.       ModifyIDCMP(TMWindowInfo->Window, 0L);
  1320.       Permit();
  1321.       }
  1322.  
  1323.     CloseWindow(TMWindowInfo->Window);
  1324.     TMWindowInfo->Window = NULL;
  1325.     TMWindowInfo->Flags = 0;
  1326.     }
  1327.  
  1328.   if(TMWindowInfo->FirstGadget)
  1329.     {
  1330.     FreeGadgets(TMWindowInfo->FirstGadget);
  1331.     TMWindowInfo->FirstGadget = NULL;
  1332.     }
  1333.   }
  1334.  
  1335.